from PyQt5.Qt import *

"""
QMainWindow是一个顶级窗口，可以包含一个或多个子窗口
继承于QWidget
不能设置布局, 因为它有自己的布局

常用方法
addToolBar() : 添加工具栏
menuBar(): 返回主窗口菜单栏
centralWidget() : 返回窗口中心的一个控件, 未设置时返回null
setCentralWidget(): 设置窗口中心的控件
setStatusBar(): 设置状态栏
statusBar() : 获得状态栏对象

"""
class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setup_ui()

    def setup_ui(self):
        self.setWindowTitle("QMainWindow")
        self.resize(400, 200)

        # 居中显示
        self.center()

        # 创建状态栏
        self.status = self.statusBar()
        # 状态栏显示提示信息, 持续5秒
        self.status.showMessage("这是状态栏提示", 5000)

        self.btn1 = QPushButton("关闭主窗口")
        self.btn1.clicked.connect(self.onButtonClick)
        layout = QHBoxLayout()
        layout.addWidget(self.btn1)
        main_frame = QWidget()
        main_frame.setLayout(layout)
        self.setCentralWidget(main_frame)


    """
    居中显示
    """
    def center(self):
        screen = QDesktopWidget().screenGeometry()
        size = self.geometry()
        self.move((screen.width()-size.width())/2, (screen.height()-size.height())/2)

    """
    关闭窗口
    sender: 信号对象
    """
    def onButtonClick(self):
        # 获取信号对象
        sender = self.sender()
        print(sender.text()+"被按下了")
        qApp = QApplication.instance()
        qApp.quit()

# 测试
if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    # 设置程序图标
    app.setWindowIcon(QIcon("./image/cartoon.ico"))
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())